home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok26.lha / FileIO / FileIO.dok < prev    next >
Text File  |  1993-08-15  |  3KB  |  92 lines

  1. ******************************************************************
  2.   Dokumentation zum Modul FileIO 1.1        Bernd Preusing 23.9.89
  3. ******************************************************************
  4.  
  5. Dies Modul dient dazu, Files komplett in den Speicher einzulesen und
  6. vom Speicher auf die Disk zu schreiben.
  7.  
  8. Es exportiert einen Aufzählungstyp für die Fehler und vier Prozeduren:
  9. Alle Namen werden aus Effizienzgründen als VAR-Parameter übergeben.
  10.  
  11. TYPE
  12.  FileIOResult =(noError, notFound, readError, writeError, saveError,
  13.          noMem, renameError, seekError);
  14.     noError:    alles klar, kein Fehler
  15.     notFound:    bei GetFile: File nicht zu öffnen
  16.     readError:    bei GetFile: Lesefehler
  17.     writeError:    bei PutFile: Schreibfehler
  18.     saveError:    bei PutFile: File nicht zu öffnen
  19.     noMem:        bei GetFile: nicht genug Speicher für Puffer
  20.     renameError:    bei PutFile: File kann nicht in .bak umbenannt werden
  21.     seekError:    bei GetFile: Dos.Seek Fehler bei der Längenbestimmung
  22.  
  23.  
  24. PROCEDURE FileExists(VAR Name: ARRAY OF CHAR):BOOLEAN;
  25.     (Abfallprodukt des Moduls)
  26.     Es wird getestet, ob 'Name' existiert und auch wirklich eine
  27.     Datei ist. Falls das File nicht existiert oder ein Directory
  28.     ist, wird FALSE zurückgegeben.
  29.  
  30.  
  31. PROCEDURE GetFile(VAR Name:ARRAY OF CHAR; VAR Addr:ADDRESS;
  32.           VAR Len:LONGINT; Add:LONGINT):FileIOResult;
  33.     Hiermit kann man ein File komplett in den Speicher laden.
  34.     Dafür wird Speicher alloziert für das File, zusätzlich ein
  35.     Byte 00, das ans Ende angefügt wird (für Texte sehr nützlich)
  36.     und 'Add' Bytes, die man selbst bestimmen kann.
  37.     Addr zeigt danach also auf einen Speicherbereich von
  38.     Length(file)+1+Add Bytes Länge. Dann wird das File ganz einge-
  39.     lesen und wieder geschlossen.
  40.     Die genaue FileLänge wird in den Parameter Len eingetragen.
  41.     Falls 'noError' zurückgegeben wird, ist alles ok und Addr und
  42.     Len sind gültig. Im Fehlerfall wird der Speicher wieder frei-
  43.     gegeben und der Grund des Fehlers zurückgegeben.
  44.  
  45.  
  46. PROCEDURE FreeFile(VAR Buffer:ADDRESS);
  47.     Gibt den Speicher des durch GetFile angelegten FilePuffers
  48.     wieder frei. Dies ist aber nicht unbedingt nötig, da eine
  49.     TermProcedure dafür Sorge trägt.
  50.  
  51.  
  52. PROCEDURE PutFile(VAR Name:ARRAY OF CHAR; Buffer:ADDRESS;
  53.           Len:LONGINT; Backup, DeallocMem: BOOLEAN):FileIOResult;
  54.     Schreibt ab Adresse Buffer Len Bytes ins File Name.
  55.     Falls Backup=TRUE, wird vorher ein evtl. existierendes File
  56.     mit dem gleichen Namen in Name.bak umbenannt.
  57.     Falls DeallocMem=TRUE, wird der Speicher nach erfolgreichem
  58.     Abspeichern freigegeben, sonst nicht.
  59.     Ist das Ergebnis ungleich noError, wird der Speicher auf keinen
  60.     Fall freigegeben, sodaß evtl. ein erneuter Versuch mit einem
  61.     anderen Namen erfolgen kann.
  62.  
  63. 1. Beispiel:
  64.  Ich möchte ein File einlesen, bearbeiten, 10 Bytes hinzufügen und
  65.  es dann unter dem gleichen Namen wieder abspeichern:
  66.  
  67. VAR Name: ARRAY[0..79] OF CHAR;
  68.     Res: FileIOResult;
  69.     Addr: CharPtr;
  70.     Len:LONGINT;
  71. ...
  72.   IF GetFile(Name,Addr,Len,10)=noError THEN
  73.     ...bearbeiten etc....
  74.     WHILE PutFile(Name,Addr,Len+10,TRUE,TRUE) # noError DO
  75.       neuen Namen beim Benutzer erfragen
  76.     END;
  77.   END;
  78. ...
  79.  
  80. 2. Beispiel:
  81.  Ich möchte ein Textfile einlesen und anzeigen:
  82.  
  83. VAR ... wie oben
  84.     Addr = POINTER TO ARRAY[0..2000000] OF CHAR;
  85.  
  86.   IF GetFile(Name,Addr,Len,0)=noError THEN (* CHAR(0) wird angehängt!! *)
  87.     WriteString(Addr^); (* Härtetest für Terminal und Dos!?? *)
  88.     FreeFile(Addr);
  89.   END;
  90.  
  91. ----------------------  ENDE  ----------------------------------
  92.